package team.mutong.taxi.utils;

import team.mutong.taxi.domain.GPSPoint;

/**
 * @author TomWang
 * @email wanghuochen@outlook.com
 * @date 2016年5月9日 上午11:34:38
 * @version 1.0
 */
public class EuclideanMetric {
	/**
	 * 计算两个数字之间的欧氏距离
	 * @param double a
	 * @param double b
	 * @return
	 * @author TomWang
	 */
	public static double getEDistence(double a, double b) {
		return Math.sqrt(Math.pow((a - b), 2));
	}
	/**
	 * 计算两个点之间的欧氏距离
	 * @param GPSPoint a
	 * @param GPSPoint b
	 * @return
	 * @author TomWang
	 */
	public static double getEDistence(GPSPoint a, GPSPoint b) {
		GPSPoint tempA = new GPSPoint(a.getX(),a.getY());
		GPSPoint tempB = new GPSPoint(b.getX(),b.getY());
		double d1, d2, R;  
	    R = 6378137; // 地球半径  
	    tempA.setY(tempA.getY() * Math.PI / 180.0);  
	    tempB.setY(tempB.getY() * Math.PI / 180.0);  
	    d1 = tempA.getY() - tempB.getY();  
	    d2 = (tempA.getX() - tempA.getX()) * Math.PI / 180.0;  
	    double d;  
	    double sa2, sb2;  
	    sa2 = Math.sin(d1 / 2.0);  
	    sb2 = Math.sin(d2 / 2.0);  
	    d = 2  
	            * R  
	            * Math.asin(Math.sqrt(sa2 * sa2 + Math.cos(tempA.getY())  
	                    * Math.cos(tempB.getY()) * sb2 * sb2));  
	    return d;  
	}
	/**
	 * 就是那二维数组保存的两个点之间的欧氏距离
	 * @param double[][] a
	 * @param double[][] b
	 * @return
	 * @author TomWang
	 */
	public static double getEDistence(double[] a, double[] b) {
		double mub = Math.pow((a[0] - b[0]), 2)
				+ Math.pow((a[1] - b[1]), 2);
		return Math.sqrt(mub);
	}

}
